const CompressionPlugin = require('compression-webpack-plugin');
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
module.exports = {
  //publicPath : './', // 若要自动生成可视化分析页面,请将publicPath设置为相对路径
  css: {
    extract: {ignoreOrder: true},
  },
  'transpileDependencies': [
    'vuetify'
  ], /*不在打包过程中生成map文件，防止代码泄露*/
  productionSourceMap: false,
  /*根据不同的模式加载不同的配置文件*/
  chainWebpack: config => {
    
    // 或者
    // 移除 prefetch 插件
    config.plugins.delete('prefetch')
    // 修改它的选项：
    /* config.plugin('prefetch').tap(options => {
       options[0].fileBlacklist = options[0].fileBlacklist || []
       options[0].fileBlacklist.push(/myasyncRoute(.)+?\.js$/)
       return options
     })*/
    
    //发布模式 通过process.env.NODE_ENV 这个字段获得编译模式
    config.when(process.env.NODE_ENV === 'production', config => {
      //entry找到默认的打包入口，调用clear则是删除默认的打包入口
      //add添加新的打包入口
      config.entry('app').clear().add('./src/main-prod.js')
      config.set('externals', {
        vue: 'Vue',
        'vue-router': 'VueRouter',
        vuex: 'Vuex',
        axios: 'axios',
        moment: 'moment',
        'mavon-editor': 'MavonEditor',
        // 'vuetify': 'Vuetify',
        // core-js还么有最新的版本，暂时不cdn引入了
        //"core-js": "core-js",
      })
      // 在生产模式下，开启gzip压缩
      config.plugin('compressionPlugin')
        .use(new CompressionPlugin({
          filename: '[path].gz[query]',
          algorithm: 'gzip',
          test: productionGzipExtensions,  //所有匹配此{RegExp}的资产都会被处理
          threshold: 512,   // 只处理大于此大小的资产。以字节为单位
          minRatio: 0.8,    //只有压缩好这个比率的资产才能被处理
          deleteOriginalAssets: false //是否删除原资源
        }))
      //使用插件
      config.plugin('html').tap(args => {
        //添加参数isProd
        args[0].isProd = true
        return args
      })
      
      config
        .plugin('webpack-bundle-analyzer')
        .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
    })
    //开发模式
    config.when(process.env.NODE_ENV === 'development', config => {
      config.entry('app').clear().add('./src/main-dev.js')
      //使用插件
      config.plugin('html').tap(args => {
        //添加参数isProd
        args[0].isProd = false
        return args
      })
    })
  }
}